package org.ccay.manage.security.dao;

import org.apache.ibatis.annotations.Param;
import org.ccay.security.entity.User;
import org.ccay.security.vo.UserVO;

/**
 * 用户的数据操作
 * @author chaowangbang
 * @since 2017年2月5日
 */
public interface IUserDao {
	
	/**
	 * 通过条件获取唯一用户（多个时报异常）
	 * @param condition 支持条件 id name displayName email phone
	 * @return 匹配的用户或空
	 */
	UserVO findUser(@Param("user")UserVO condition);
	
    /**
     * 添加用户
     * @param user
     * @return
     */
    int addUser(UserVO user);
    /**
     * 更新用户
     * @param user
     * @return
     */
    int updateUser(UserVO user);
    
	/**
	 * 删除用户（逻辑删除，将deleted设置为1）
	 * @param id
	 * @return
	 */
	int delUser(Long id);
	
	/**
	 * 还原用户
	 * @param id
	 * @return
	 */
	int revertUser(Long id);
	
	/**
	 * 添加修改时 用户名、显示名重复校验
	 * @param user
	 * @return
	 */
	int checkUser(UserVO user);
	
	/**
	 * 用户名不能重复校验
	 * @param username
	 * @param userId
	 * @return
	 */
	int checkUsernameUnique(String username, Long userId);
	

	/**
	 * displayName不能重复校验
	 * @param email
	 * @param userId
	 * @return 
	 */
	int checkUserDisplayNameUnique(String displayName, Long userId);

	/**
	 * 获取用户（通过id）
	 * @param userId
	 * @return user or null
	 */
	UserVO findUserById(Long userId);
	
	/**
	 * 获取用户（通过name）
	 * @param userName
	 * @return user or null
	 */
	UserVO findUserByName(String userName);
}
